#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int checkData(int* p);
//int main() {
//	int p[5];
//	for ( p[0] = 1; p[0] <=5; p[0]++)
//	{
//		for (p[1] = 1; p[1] <= 5; p[1]++)
//		{
//			for (p[2] = 1; p[2] <= 5; p[2]++)
//			{
//				for (p[3] = 1; p[3] <= 5; p[3]++)
//				{
//					for (p[4] = 1; p[4] <= 5; p[4]++)
//					{
//						if ((p[1] == 2) + (p[0] == 3) == 1 &&
//							(p[1] == 2) + (p[4] == 4) == 1 &&
//							(p[2] == 1) + (p[3] == 2) == 1 &&
//							(p[2] == 5) + (p[3] == 3) == 1 &&
//							(p[4] == 4) + (p[0] == 1) == 1 &&
//							checkData(p)
//							) {
//							int i = 0;
//							for ( i = 0; i < 5; i++)
//							{
//								printf("%d ", p[i]);
//							}
//							putchar('\n');
//						}
//					}
//				}
//			}
//		}
//	}
//	return 0;
//}
//int checkData(int* p) {
//	int tmp[7] = {0};
//	int i = 0;
//	for ( i = 0; i < 5; i++)
//	{
//		if (tmp[p[i]]) {
//			return 0;
//		}
//		tmp[p[i]] = 1;
//	}
//	return 1;
//}
//int main() {
//	int i = 0;
//	for ( i = 'a'; i <='d'; i++)
//	{
//		if ((i != 'a') + (i == 'c') + (i == 'd') + (i != 'd') == 3) {
//			printf("%c", i);
//		}
//	}
//	return 0;
//}
void yanghuisanjiao(int n);
int main() {
	int n = 0;
	scanf("%d", &n);
	yanghuisanjiao(n);
	return 0;
}
void yanghuisanjiao(int n) {
	int data[30][30] = { 1 };
	int i = 0;
	int j = 0;
	for ( i = 1; i < n; i++)
	{
		data[i][0] = 1;
		for ( j = 1; j <= i; j++)
		{
			data[i][j] = data[i - 1][j - 1] + data[i - 1][j];
		}
	}for ( i = 0; i < n; i++)
	{
		for (j = 0; j <= i; j++) {
			printf("%d\t", data[i][j]);
		}
		printf("\n");
	}
}